home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 8 / The Arsenal Files Collection #8 (Arsenal Computer) (1996).ISO / g_quake / server~1.zip / _RANK.QC < prev    next >
Text File  |  1996-10-04  |  6KB  |  196 lines

  1. /*
  2. **
  3. ** _rank.qc (Rank Code, 1.2)
  4. **
  5. ** Copyright (C) 1996 Johannes Plass
  6. ** 
  7. ** This program is free software; you can redistribute it and/or modify
  8. ** it under the terms of the GNU General Public License as published by
  9. ** the Free Software Foundation; either version 2 of the License, or
  10. ** (at your option) any later version.
  11. ** 
  12. ** This program is distributed in the hope that it will be useful,
  13. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15. ** GNU General Public License for more details.
  16. **
  17. ** You should have received a copy of the GNU General Public License
  18. ** along with this program; if not, write to the Free Software
  19. ** Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20. ** 
  21. ** Author:   Johannes Plass (plass@dipmza.physik.uni-mainz.de)
  22. **
  23. */
  24.  
  25.  
  26. void(entity player,entity sort) RankPrintRank;
  27.  
  28. void(entity player) RankInfo =
  29. {
  30.    if (!USE_MODULE_RANK) return;
  31.                // 123456789#123456789#123456789#12345678
  32.    sprint(player,"£");
  33.    sprint(player," Rank");
  34.    sprint(player,      " provides extended rankings.\n");
  35.    sprint(player,"  Type 'help-rank' for help.\n");
  36. };
  37.  
  38. void(entity player) RankInit =
  39. {
  40.    if (!USE_MODULE_RANK) return;
  41.  
  42.    stuffcmd(player,"alias rank \"impulse 203\";\n");
  43.    stuffcmd(player,"alias help-rank \"impulse 204\";\n");
  44. };
  45.  
  46. void(entity player) RankActiveMessage =
  47. {
  48.    if (!USE_MODULE_RANK) return;
  49.                // 123456789#123456789#123456789#12345678
  50.    sprint(player,"  Rank          (help-rank)\n");
  51. };
  52.  
  53. void(entity player) RankHelp =
  54. {
  55.    if (!USE_MODULE_RANK) return;
  56.  
  57.                // 123456789#123456789#123456789#12345678
  58.    sprint(player,"Rank:");
  59.    sprint(player,      " provides extended rankings.\n");
  60.    sprint(player,"Type 'rank' to display a list of\n");
  61.    sprint(player,"current ranks in the format\n");
  62.    sprint(player,"  TOT = KILL DEATH ACCID = PLAYER\n");
  63.    sprint(player,"where\n");
  64.    sprint(player,"  PLAYER : name of player\n");
  65.    sprint(player,"  TOT    : his total score\n");
  66.    sprint(player,"  KILL   : how many he killed\n");
  67.    sprint(player,"  DEATH  : how many killed him\n");
  68.    sprint(player,"  ACCID  : his deathly accidents\n");
  69.    sprint(player,"Formula for TOT:\n");
  70.    sprint(player,"  TOT = 3*KILL - DEATH - 3*ACCID\n");
  71. };
  72.  
  73. void(entity player,float event) RankCountEvent =
  74. {
  75.    if (!USE_MODULE_RANK) return;
  76.  
  77.    if      (event == RANK_KILL)     player.rank_kills     = player.rank_kills     + 1;
  78.    else if (event == RANK_DEATH)    player.rank_deaths    = player.rank_deaths    + 1;
  79.    else if (event == RANK_ACCIDENT) player.rank_accidents = player.rank_accidents + 1;
  80.    else if (event == RANK_SUICIDE)  player.rank_suicides  = player.rank_suicides  + 1;
  81.    player.rank_total =   3 * player.rank_kills 
  82.             -     player.rank_deaths
  83.                 - 3 * player.rank_accidents
  84.                 - 6 * player.rank_suicides
  85.             ;
  86.  
  87. };
  88.  
  89. void(entity targ, entity attacker) RankClientObituary =
  90. {
  91.    //dprint ("RankClientObituary: executing\n");
  92.  
  93.    if (!USE_MODULE_RANK) return;
  94.  
  95.    if (targ.classname == "player") {
  96.       if (attacker.classname == "teledeath") {
  97.          // telefragging
  98.          RankCountEvent(attacker,RANK_KILL);
  99.          RankCountEvent(targ,RANK_DEATH);
  100.       } else if (attacker.classname == "teledeath2") {
  101.          // never seen in game, so may be wrong here
  102.          RankCountEvent(targ,RANK_ACCIDENT);
  103.       } else if (attacker.classname == "player") {
  104.          if (targ == attacker) {
  105.             // player killed by own weapon
  106.             RankCountEvent(targ,RANK_ACCIDENT);
  107.          }  else {
  108.             // attacker killed target
  109.             RankCountEvent(attacker,RANK_KILL);
  110.             RankCountEvent(targ,RANK_DEATH);
  111.          }
  112.       } else {
  113.          // player killed by environment (slime, water, lava etc.)
  114.          RankCountEvent(targ,RANK_ACCIDENT);
  115.       }
  116.    }
  117. };
  118.  
  119. void(entity player,float n,float digits) RankPrintRankNumber =
  120. {
  121.    local string ns;
  122.    if (n<0) {
  123.       if (digits > 3 && n >= -99) sprint (player," ");
  124.       if (digits > 2 && n >=  -9) sprint (player," ");
  125.    } else if (n >= 0) {
  126.       if (digits > 3 && n <= 999) sprint (player," ");
  127.       if (digits > 2 && n <=  99) sprint (player," ");
  128.       if (digits > 1 && n <=   9) sprint (player," ");
  129.    }
  130.    ns = ftos(n);
  131.    sprint (player,ns);
  132. };
  133.  
  134. void(entity player,entity sort) RankPrintRank =
  135. {
  136.    local float acc;
  137.    if (PlayerStatusPlayerIsBogusPlayer(sort)) return;
  138.    else if (sort.deadflag != DEAD_NO) sprint(player,"d");
  139.    else if (sort.player_status & PLAYER_IS_OBSERVER) sprint(player,"o");//#jp#(Observer)
  140.    else sprint(player," ");
  141.    RankPrintRankNumber(player,sort.rank_total,4);
  142.    sprint (player," = ");
  143.    RankPrintRankNumber(player,sort.rank_kills,3);
  144.    sprint (player," ");
  145.    RankPrintRankNumber(player,sort.rank_deaths,3);
  146.    sprint (player," ");
  147.    acc = sort.rank_accidents + sort.rank_suicides;
  148.    RankPrintRankNumber(player,acc,3);
  149.    sprint (player," = ");
  150.    sprint (player,sort.netname);
  151.    sprint (player,"\n");
  152. };
  153.  
  154. void(entity player) RankDumpRanksToConsole =
  155. {
  156.    local entity    e, sort, walk;
  157.  
  158.    if (!USE_MODULE_RANK) return;
  159.  
  160.    if (world.chain) error ("RankDumpRanksToConsole: world.chain is set");
  161.  
  162. // build a sorted lis
  163.    e = find(world, classname, "player");
  164.    sort = world;
  165.    while (e) {
  166.       if (!sort) {
  167.          sort = e;
  168.          e.chain = world;
  169.       }  else {
  170.          if (e.rank_total < sort.rank_total) {
  171.             e.chain = sort;
  172.             sort = e;
  173.          } else {
  174.             walk = sort;
  175.             do {
  176.                if (!walk.chain) {
  177.                   e.chain = world;
  178.                   walk.chain = e;
  179.                } else if (walk.chain.rank_total > e.rank_total) {
  180.                   e.chain = walk.chain;
  181.                   walk.chain = e;
  182.                } else
  183.                   walk = walk.chain;
  184.             } while (walk.chain != e);
  185.          }
  186.       }
  187.       e = find(e, classname, "player");
  188.    }
  189.  
  190.    while (sort) {
  191.       RankPrintRank (player,sort);
  192.       sort = sort.chain;
  193.    }
  194. };
  195.  
  196.